#include<stdio.h>
#include<stdbool.h>
#define maxn 50050
int L, N, M;
int stones[maxn];
bool judge(int x) {
  int last = 0;
  int remove = 0;
  for(int i=0; i<=N; ++i) {
    if(stones[i]-last>=x) {
      last = stones[i];
    }
    else {
      remove++;
    }
  }
  return (remove <= M);
}
int main() {
  scanf("%d%d%d", &L, &N, &M);
  for(int i=0; i<N; ++i) {
    scanf("%d", stones+i);
  }
  stones[N] = L;
  int l=1, r=L;
  int m;
  int ans;
  while(l<=r) {
    m = (l+r)/2;
    if(judge(m)) {ans = m; l=m+1;}
    else r=m-1;
  }
  /* 关于为什么要保存这个ans ??
   * 存上就AC了 */
  printf("%d\n", ans);
}